package learningThread.syn.synchronizedMethodLockObj.staticSyn.part2;

/**
 * 在方法上添加 static 是作为 class级别的锁,作用范围是所有对象， synchronized static和 synchronized(class)是一个效果
 * 不使用static修饰则是对象级别的锁
 */
public class Service {

    public synchronized static void serviceA(){
        try {
            System.out.println("线程名称:"+Thread.currentThread().getName()+"，在"+System.currentTimeMillis()+"进入serviceA");
            Thread.sleep(3000);
            System.out.println("线程名称:"+Thread.currentThread().getName()+"，在"+System.currentTimeMillis()+"离开serviceA");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public synchronized static void serviceB(){
        System.out.println("线程名称:"+Thread.currentThread().getName()+"，在"+System.currentTimeMillis()+"进入serviceB");
        System.out.println("线程名称:"+Thread.currentThread().getName()+"，在"+System.currentTimeMillis()+"离开serviceB");
    }

    public synchronized  void serviceC(){
        System.out.println("线程名称:"+Thread.currentThread().getName()+"，在"+System.currentTimeMillis()+"进入serviceC");
        System.out.println("线程名称:"+Thread.currentThread().getName()+"，在"+System.currentTimeMillis()+"离开serviceC");
    }
}
